Advertisement
Guest User

Linuxcnc 400w dc spindle PID using gmoccapy

a guest
Apr 9th, 2017
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.80 KB | None | 0 0
  1. Careful there are 2 files....
  2.  
  3.  
  4. cnc3040.hal
  5. # Generated by stepconf 1.1 at Sat Apr 8 18:10:51 2017
  6. # If you make changes to this file, they will be
  7. # overwritten when you run stepconf again
  8. loadrt [KINS]KINEMATICS
  9. loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
  10. loadrt hal_parport cfg="0 out"
  11. setp parport.0.reset-time 2500
  12. loadrt stepgen step_type=0,0,0
  13.  
  14.  
  15.  
  16.  
  17. #============================================================
  18. #============================================================
  19. #============================================================
  20. #============================================================
  21.  
  22.  
  23.  
  24.  
  25.  
  26. # --------------------------------------------------
  27. # Closed Loop Spindle Control
  28. # --------------------------------------------------
  29.  
  30. # Load Real Time modules
  31. loadrt encoder num_chan=1
  32. loadrt pid num_chan=1
  33. loadrt pwmgen output_type=0
  34. loadrt not count=1
  35.  
  36. # Assign to threads
  37. addf encoder.update-counters base-thread
  38. addf encoder.capture-position servo-thread
  39. addf pid.0.do-pid-calcs servo-thread
  40. addf pwmgen.update servo-thread
  41. addf pwmgen.make-pulses base-thread
  42.  
  43.  
  44. # Initialize the encoder (spindle)
  45. setp encoder.0.position-scale 0.05
  46. setp encoder.0.counter-mode 1
  47.  
  48. # Initialize the PID
  49. setp pid.0.Pgain 4
  50. setp pid.0.Igain 9
  51. setp pid.0.Dgain 3
  52. setp pid.0.maxoutput 12000
  53. setp pid.0.maxerrorD 3000
  54. setp pid.0.maxerrorI 3000
  55. setp pid.0.maxerror 2000
  56. setp pid.0.maxcmdD 5000
  57. setp pid.0.maxcmdDD 2000
  58. setp pid.0.FF0 1
  59. setp pid.0.FF1 1
  60. # setp pid.0.FF2 1
  61. setp pid.0.enable 1
  62. setp pid.0.deadband 50
  63.  
  64. # Initialize the pwmgen
  65. setp pwmgen.0.pwm-freq 2000.0
  66. setp pwmgen.0.scale 12000
  67. setp pwmgen.0.dither-pwm true
  68. setp pwmgen.0.offset 0.0
  69.  
  70. # Attach the motion.spindle-on to enable the pwmgen and the pid
  71. net spindle_enable motion.spindle-on => pwmgen.0.enable => pid.0.enable
  72.  
  73. # Attach the encoder to the parallel port pin
  74. net parport_10_in parport.0.pin-10-in => encoder.0.phase-A => encoder.0.phase-Z
  75.  
  76. # Attach the encoder to the motion
  77. net spindle_rev_count encoder.0.position => motion.spindle-revs
  78. net spindle_index_enable encoder.0.index-enable <=> motion.spindle-index-enable
  79. # net gmoccapy.spindle_feedback_bar pid.0.feedback
  80.  
  81. # Attach the pid to the scale, motion, and sum
  82. # net pid_feedback pid.0.feedback <= encoder.0.velocity
  83. net pid_command pid.0.command <= motion.spindle-speed-out
  84.  
  85. # Attach the pwmgen to the sum and the parallel port
  86. net pwmgen_value pwmgen.0.value <= pid.0.output
  87. net pwmgen_out pwmgen.0.pwm => parport.0.pin-01-out
  88.  
  89. #============================================================
  90. #============================================================
  91. #============================================================
  92. #============================================================
  93.  
  94.  
  95.  
  96. addf parport.0.read base-thread
  97. addf stepgen.make-pulses base-thread
  98. addf parport.0.write base-thread
  99. addf parport.0.reset base-thread
  100.  
  101. addf stepgen.capture-position servo-thread
  102. #addf encoder.capture-position servo-thread
  103. addf motion-command-handler servo-thread
  104. addf motion-controller servo-thread
  105. addf stepgen.update-freq servo-thread
  106.  
  107. #net spindle-cmd-rpm => pwmgen.0.value
  108. #net spindle-on <= motion.spindle-on => pwmgen.0.enable
  109. #net spindle-pwm <= pwmgen.0.pwm
  110.  
  111. #net spindle-cmd-rpm <= motion.spindle-speed-out
  112. net spindle-cmd-rpm-abs <= motion.spindle-speed-out-abs
  113. net spindle-cmd-rps <= motion.spindle-speed-out-rps
  114. net spindle-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
  115. # net spindle-at-speed => motion.spindle-at-speed
  116. net spindle-ccw <= motion.spindle-reverse
  117.  
  118. #setp encoder.0.position-scale 3.000000
  119. #setp encoder.0.counter-mode 1
  120. #net spindle-position encoder.0.position => motion.spindle-revs
  121. #net spindle-velocity-feedback-rps encoder.0.velocity => motion.spindle-speed-in
  122. #net spindle-index-enable encoder.0.index-enable <=> motion.spindle-index-enable
  123. #net spindle-phase-a encoder.0.phase-A
  124. #net spindle-phase-b encoder.0.phase-B
  125. #net spindle-index encoder.0.phase-Z
  126.  
  127. net probe-in => motion.probe-input
  128.  
  129. #net spindle-pwm => parport.0.pin-01-out
  130. net xstep => parport.0.pin-02-out
  131. setp parport.0.pin-02-out-reset 1
  132. net xdir => parport.0.pin-03-out
  133. net ystep => parport.0.pin-04-out
  134. setp parport.0.pin-04-out-reset 1
  135. net ydir => parport.0.pin-05-out
  136. net zstep => parport.0.pin-06-out
  137. setp parport.0.pin-06-out-reset 1
  138. net zdir => parport.0.pin-07-out
  139. net astep => parport.0.pin-08-out
  140. setp parport.0.pin-08-out-reset 1
  141. net adir => parport.0.pin-09-out
  142. net xenable => parport.0.pin-14-out
  143. net spindle-ccw => parport.0.pin-16-out
  144. net spindle-on => parport.0.pin-17-out
  145. #net spindle-phase-a <= parport.0.pin-10-in
  146. net home-y <= parport.0.pin-11-in
  147. net home-z <= parport.0.pin-12-in
  148. net probe-in <= parport.0.pin-13-in
  149. net home-x <= parport.0.pin-15-in
  150.  
  151. setp stepgen.0.position-scale [JOINT_0]SCALE
  152. setp stepgen.0.steplen 1
  153. setp stepgen.0.stepspace 0
  154. setp stepgen.0.dirhold 36500
  155. setp stepgen.0.dirsetup 36500
  156. setp stepgen.0.maxaccel [JOINT_0]STEPGEN_MAXACCEL
  157. net xpos-cmd joint.0.motor-pos-cmd => stepgen.0.position-cmd
  158. net xpos-fb stepgen.0.position-fb => joint.0.motor-pos-fb
  159. net xstep <= stepgen.0.step
  160. net xdir <= stepgen.0.dir
  161. net xenable joint.0.amp-enable-out => stepgen.0.enable
  162. net home-x => joint.0.home-sw-in
  163.  
  164. setp stepgen.1.position-scale [JOINT_1]SCALE
  165. setp stepgen.1.steplen 1
  166. setp stepgen.1.stepspace 0
  167. setp stepgen.1.dirhold 36500
  168. setp stepgen.1.dirsetup 36500
  169. setp stepgen.1.maxaccel [JOINT_1]STEPGEN_MAXACCEL
  170. net ypos-cmd joint.1.motor-pos-cmd => stepgen.1.position-cmd
  171. net ypos-fb stepgen.1.position-fb => joint.1.motor-pos-fb
  172. net ystep <= stepgen.1.step
  173. net ydir <= stepgen.1.dir
  174. net yenable joint.1.amp-enable-out => stepgen.1.enable
  175. net home-y => joint.1.home-sw-in
  176.  
  177. setp stepgen.2.position-scale [JOINT_2]SCALE
  178. setp stepgen.2.steplen 1
  179. setp stepgen.2.stepspace 0
  180. setp stepgen.2.dirhold 36500
  181. setp stepgen.2.dirsetup 36500
  182. setp stepgen.2.maxaccel [JOINT_2]STEPGEN_MAXACCEL
  183. net zpos-cmd joint.2.motor-pos-cmd => stepgen.2.position-cmd
  184. net zpos-fb stepgen.2.position-fb => joint.2.motor-pos-fb
  185. net zstep <= stepgen.2.step
  186. net zdir <= stepgen.2.dir
  187. net zenable joint.2.amp-enable-out => stepgen.2.enable
  188. net home-z => joint.2.home-sw-in
  189.  
  190. net estop-out <= iocontrol.0.user-enable-out
  191. net estop-out => iocontrol.0.emc-enable-in
  192.  
  193. loadusr -W hal_manualtoolchange
  194. net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
  195. net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
  196. net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
  197. net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
  198.  
  199.  
  200.  
  201.  
  202. ==================================================================================
  203. ==================================================================================
  204. ==================================================================================
  205. ==================================================================================
  206. ==================================================================================
  207. ==================================================================================
  208. ==================================================================================
  209. ==================================================================================
  210. ==================================================================================
  211. ==================================================================================
  212. ==================================================================================
  213.  
  214.  
  215.  
  216. postgui_call_list.hal
  217.  
  218. # These files are loaded post GUI, in the order they appear
  219. # Generated by stepconf 1.1 at Sat Apr 8 18:10:51 2017
  220. # If you make changes to this file, they will be
  221. # overwritten when you run stepconf again
  222.  
  223. source custom_postgui.hal
  224.  
  225. # net gmoccapy_spindle_at_speed gmoccapy.spindle_at_speed_led <= motion.spindle-at-speed
  226. # net gmoccapy_spindle_feedback gmoccapy.spindle_feedback_bar <= encoder.0.velocity
  227. net encoder_raw_velocity encoder.0.velocity => motion.spindle-speed-in pid.0.feedback gmoccapy.spindle_feedback_bar
  228. net spindle-at-speed => motion.spindle-at-speed gmoccapy.spindle_at_speed_led
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement